Naja du könntest das Shared Memory mit einer ausreichend grossen Fixgrösse anlegen, und dann Offsets statt Zeiger speichern. (Entweder Offsets zum Anfang des Shared-Memory Bereichs, oder, vermutlich einfacher, den Offset zu der Adresse wo der Offset gespeichert ist.)
Auf jeden Fall wirst du dabei aber nicht um die Verwaltung einer eigenen Free-List herumkommen - inklusive Synchronisierung wenn mehr als nur ein Prozess darauf zugreift.
Gerade auf Linux sollte das, also das Anfordern eines sehr grossen Speicherblocks, relativ egal sein, da Linux ja beim committen nicht wirklich committet.